import java.util.ArrayList;
import java.util.List;

/**
 * 给定一个仅包含数字 2-9 的字符串，返回所有它能表示的字母组合。
 * <p>
 * 给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母。
 * 示例:
 * <p>
 * 输入："23"
 * 输出：["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
 */
class Solution {

    public static void main(String[] args) {
        System.out.println(String.join("-", letterCombinations("23")));
    }

    public static List<String> letterCombinations(String digits) {
        List list = new ArrayList<String>();
        for (int i = 0; i < digits.length(); i++) {
            char c = digits.charAt(i);
            list = handle(list, c);
        }
        return list;
    }

    public static List<String> handle(List<String> list, char c) {
        List<String> newList = new ArrayList<>();
        if (list.isEmpty()) {
            switch (c) {
                case '2':
                    newList.add("a");
                    newList.add("b");
                    newList.add("c");
                    break;
                case '3':
                    newList.add("d");
                    newList.add("e");
                    newList.add("f");
                    break;
                case '4':
                    newList.add("g");
                    newList.add("h");
                    newList.add("i");
                    break;
                case '5':
                    newList.add("j");
                    newList.add("k");
                    newList.add("l");
                    break;
                case '6':
                    newList.add("m");
                    newList.add("n");
                    newList.add("o");
                    break;
                case '7':
                    newList.add("p");
                    newList.add("q");
                    newList.add("r");
                    newList.add("s");
                    break;
                case '8':
                    newList.add("t");
                    newList.add("u");
                    newList.add("v");
                    break;
                case '9':
                    newList.add("w");
                    newList.add("x");
                    newList.add("y");
                    newList.add("z");
                    break;
            }
        } else {
            switch (c) {
                case '2':
                    for (String s : list) {
                        newList.add(s + "a");
                        newList.add(s + "b");
                        newList.add(s + "c");
                    }
                    break;
                case '3':
                    for (String s : list) {
                        newList.add(s + "d");
                        newList.add(s + "e");
                        newList.add(s + "f");
                    }
                    break;
                case '4':
                    for (String s : list) {
                        newList.add(s + "g");
                        newList.add(s + "h");
                        newList.add(s + "i");
                    }
                    break;
                case '5':
                    for (String s : list) {
                        newList.add(s + "j");
                        newList.add(s + "k");
                        newList.add(s + "l");
                    }
                    break;
                case '6':
                    for (String s : list) {
                        newList.add(s + "m");
                        newList.add(s + "n");
                        newList.add(s + "o");
                    }
                    break;
                case '7':
                    for (String s : list) {
                        newList.add(s + "p");
                        newList.add(s + "q");
                        newList.add(s + "r");
                        newList.add(s + "s");
                    }
                    break;
                case '8':
                    for (String s : list) {
                        newList.add(s + "t");
                        newList.add(s + "u");
                        newList.add(s + "v");
                    }
                    break;
                case '9':
                    for (String s : list) {
                        newList.add(s + "w");
                        newList.add(s + "x");
                        newList.add(s + "y");
                        newList.add(s + "z");
                    }
                    break;
            }
        }
        return newList;
    }


}
